package com.hulytu.dev2.plugin;


import com.hulytu.dev2.lang.CNull;
import com.hulytu.dev2.lang.CVoid;

/**
 * 全局插件，由插件自己做分发
 */
public interface EnhancePlugin {

    Object NULL = CNull.INST;

    Object VOID = CVoid.INST;

    /**
     * 初始化一些东西
     */
    void init();

    void destroy();

    /**
     * @param callback 调用方
     * @param method   方法代名词
     * @param args     参数
     * @return 如果是 void 则返回 {@link #VOID} 为 null 则返回 {@link #NULL} 调用失败为 <code>null</code>
     */
    Object invoke(Object callback, String method, Object... args);

}
